/**
 * 
 */
package br.idez.idezJet.integracao.vo;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.Email;

/**
 * @author Moacir Junior
 * 
 */
@Entity
public class Usuario implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;

	@NotNull(message = "{campo.nulo}")
	private String nome;

	@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
	private RG rg;

	@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
	private CPF cpf;

	@Past
	@NotNull(message = "{campo.nulo}")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataNascimento;

	@NotNull(message = "{campo.nulo}")
	private Long numCartaoMilhas;

	@NotNull(message = "{campo.nulo}")
	@Email(message = "{email.invalido}")
	@Column(unique = true)
	private String email;

	@NotNull(message = "{campo.nulo}")
	private String senha;

	@Version
	private Timestamp dataUltimaAtualizacao;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public RG getRg() {
		return rg;
	}

	public void setRg(RG rg) {
		this.rg = rg;
	}

	public CPF getCpf() {
		return cpf;
	}

	public void setCpf(CPF cpf) {
		this.cpf = cpf;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Long getNumCartaoMilhas() {
		return numCartaoMilhas;
	}

	public void setNumCartaoMilhas(Long numCartaoMilhas) {
		this.numCartaoMilhas = numCartaoMilhas;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}

	/**
	 * @param senha
	 *            the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}

	/**
	 * @return the dataUltimaAtualizacao
	 */
	public Timestamp getDataUltimaAtualizacao() {
		return dataUltimaAtualizacao;
	}

	/**
	 * @param dataUltimaAtualizacao
	 *            the dataUltimaAtualizacao to set
	 */
	public void setDataUltimaAtualizacao(Timestamp dataUltimaAtualizacao) {
		this.dataUltimaAtualizacao = dataUltimaAtualizacao;
	}
	
	public String toString(){
		return
		"Id do usuario - " + this.id +
		"Nome do Usuario - " + this.nome +
		"Email do Usuario - " + this.email +
		"\n";
	}

}
